home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1994 January / PSL Monthly Shareware CD-ROM (Public Software Library) (January 1994).iso / games / dos / puzzles / pc_maze.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  5.6 KB  |  201 lines

  1. 0   REM MODIFIED FOR USE ON THE IBM-PC
  2. 1   REM BY GARY & DONNA MCCOY
  3. 2  KEY OFF
  4. 3  CLEAR,,20000
  5. 4  SCREEN 0:WIDTH 40
  6. 200   CLS : GOTO 6400
  7. 800  N = 2:A = H:B = V:FF = 2 ^ (F - 1)
  8. 900  SCREEN 1:COLOR 0,1:CLS
  9. 1000  Z = M(A,B) * FF
  10. 1200   IF  FN M(Z / 16) = 0 THEN 1600
  11. 1300  RL =  - 1: GOSUB 5400
  12. 1400   GOTO 2000
  13. 1600  W = M(A + S,B - R) * FF
  14. 1700   IF  FN M(W / 128) = 0 THEN 2000
  15. 1800  RL =  - 1: GOSUB 4600
  16. 2000   IF  FN M(Z / 64) = 0 THEN 2400
  17. 2100  RL = 1: GOSUB 5400
  18. 2200   GOTO 2800
  19. 2400  W = M(A - S,B + R) * FF
  20. 2500   IF  FN M(W / 128) = 0 THEN 2800
  21. 2600  RL = 1: GOSUB 4600
  22. 2800   IF  FN M(Z / 128) = 1 THEN 3400
  23. 3000  N = N + 1: IF N > 8 THEN 3500
  24. 3100  A = A + R:B = B + S: IF B < 2 THEN 3500
  25. 3200   GOTO 1000
  26. 3400   GOSUB 3800
  27. 3500   RETURN
  28. 3800   PSET (VX + DX(N),YU(N)),2
  29. 3900   LINE (VX + DX(N),YU(N))-(VX + DX(N),YD(N)),2
  30. 4000   LINE (VX + DX(N),YD(N))-(VX - DX(N),YD(N)),2
  31. 4100   LINE (VX - DX(N),YD(N))-(VX - DX(N),YU(N)),2
  32. 4200   LINE (VX - DX(N),YU(N))-(VX + DX(N),YU(N)),2
  33. 4300   RETURN
  34. 4600   PSET (VX + RL * DX(N - 1),YU(N)),2
  35. 4700   LINE (VX + RL * DX(N - 1),YU(N))-(VX + RL * DX(N),YU(N)),2
  36. 4800   LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
  37. 4900   LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N)),2
  38. 5000   RETURN
  39. 5400   PSET(VX + RL * DX(N - 1),YU(N - 1)),2
  40. 5500  LINE (VX + RL * DX(N-1),YU(N-1))-(VX + RL * DX(N),YU(N)),2
  41. 5600   LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
  42. 5700   LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N - 1)),2
  43. 5800   IF N > 2 THEN  LINE (VX + RL * DX(N-1),YD(N-1))-(VX + RL * DX(N - 1),YU(N - 1)),2
  44. 5900   RETURN
  45. 6400   CLS:COLOR 9,0:LOCATE 6,12: PRINT "YOU ARE THE RAT!": PRINT : LOCATE 4,4: PRINT "A DIFFERENT PERSPECTIVE ON MAZES."
  46. 6405  CH = 0
  47. 6410   PRINT : LOCATE 1,1: PRINT "FROM THE COMPUSERVE APPLE USER'S GROUP"
  48. 6420   LOCATE 2,9: PRINT "PUBLIC ACCESS DATABASE"
  49. 6425   LOCATE 17,1: PRINT "----------------------------------------"
  50. 6430   LOCATE 18,9: PRINT "USE <- AND -> TO TURN"
  51. 6440   PRINT : LOCATE 19,6: PRINT "<SPACE BAR> TO MOVE FORWARD"
  52. 6450   PRINT : LOCATE 20,3: PRINT "<ESCAPE> FOR A TOP VIEW (TO CHEAT)"
  53. 6500   DEF  FN M(X) =  INT (X) -  INT ( INT (X) / 2) * 2
  54. 6600   LOCATE 15,1:FX = 36: INPUT "PLEASE ENTER MAZE SIZE (H,V) ";H,V
  55. 6700  H =  INT (H):V =  INT (V)
  56. 6800   IF H > 2 AND H < 51 AND V > 2 AND V < 51 THEN 7000
  57. 6900   PRINT "2<H<51 -- 2<V<51": GOTO 6600
  58. 7000  N = H * V - 1:H = H + 1:V = V + 1:D = 1
  59. 7100   DIM M(52,52),W(400)
  60. 7200   FOR J = 1 TO V + 1:M(1,J) = 4:M(H + 1,J) = 1: NEXT J
  61. 7300  MX = 278:MY = 190:VX =  INT (MX / 2):VY =  INT (MY / 2):X = VX
  62. 7500   FOR J = 1 TO 8:DX(J) = X:YU(J) =  INT (VY - X * VY / VX)
  63. 7600  YD(J) =  INT (VY + X * (MY - VY) / VX):X =  INT (X * 7 / 10): NEXT J
  64. 7700   FOR I = 2 TO H:M(I,V + 1) = 8:M(I,1) = 2
  65. 7800   FOR J = 2 TO V:M(I,J) = 15: NEXT J,I
  66. 8500  R =  INT (H / 2 + 1):S =  INT (V / 2 + 1):M(R,S) = 15
  67. 8550   COLOR 23
  68. 8600   PRINT "            GENERATING MAZE."
  69. 8650   COLOR 9
  70. 8900   FOR IW = 1 TO N
  71. 9000  I = 0
  72. 9100   IF M(R - 1,S) < 15 THEN 9300
  73. 9200  I = I + 1:C(I) = 1
  74. 9300   IF M(R,S - 1) < 15 THEN 9500
  75. 9400  I = I + 1:C(I) = 2
  76. 9500   IF M(R + 1,S) < 15 THEN 9700
  77. 9600  I = I + 1:C(I) = 3
  78. 9700   IF M(R,S + 1) < 15 THEN 9900
  79. 9800  I = I + 1:C(I) = 4
  80. 9900   IF I = 0 THEN 12300
  81. 10000   IF I <  > 1 THEN I =  INT ( RND (1) * I) + 1
  82. 10100   ON C(I) GOTO 10300,10800,11300,11800
  83. 10300  M(R,S) = M(R,S) -  FN M(M(R,S))
  84. 10400  R = R - 1
  85. 10500  M(R,S) = M(R,S) -  FN M(M(R,S) / 4) * 4
  86. 10600   GOTO 13400
  87. 10800  M(R,S) = M(R,S) -  FN M(M(R,S) / 8) * 8
  88. 10900  S = S - 1
  89. 11000  M(R,S) = M(R,S) -  FN M(M(R,S) / 2) * 2
  90. 11100   GOTO 13400
  91. 11300  M(R,S) = M(R,S) -  FN M(M(R,S) / 4) * 4
  92. 11400  R = R + 1
  93. 11500  M(R,S) = M(R,S) -  FN M(M(R,S))
  94. 11600   GOTO 13400
  95. 11800  M(R,S) = M(R,S) -  FN M(M(R,S) / 2) * 2
  96. 11900  S = S + 1
  97. 12000  M(R,S) = M(R,S) -  FN M(M(R,S) / 8) * 8
  98. 12100   GOTO 13400
  99. 12300   IF D =  - 1 THEN 12700
  100. 12400   IF R <  > H THEN 13100
  101. 12500   IF S <  > V THEN 13000
  102. 12600  R = 2:S = 2: GOTO 13200
  103. 12700   IF R <  > 2 THEN 13100
  104. 12800   IF S <  > V THEN 13000
  105. 12900  R = H:S = 2: GOTO 13200
  106. 13000  S = S + 1:D =  - D: GOTO 13200
  107. 13100  R = R + D
  108. 13200   IF M(R,S) = 15 THEN 12300
  109. 13300   GOTO 9000
  110. 13400   NEXT IW
  111. 13500  MH = H:MV = V
  112. 13700  I =  INT ( RND (1) * (MH - 1)) + 2
  113. 13800  M(I,1) = 0
  114. 13900  M(I,2) = M(I,2) -  FN M(M(I,2) / 8) * 8
  115. 14000  H =  INT ( RND (1) * (MH - 1)) + 2
  116. 14100  H1 = H:V1 = V
  117. 14300   COLOR 23: LOCATE 23,12: PRINT "MAZE COMPLETED.": COLOR 9
  118. 14400   GOTO 17000
  119. 14700  HZ =  INT (MX / MH):VZ =  INT (MY / MV)
  120. 14750  CH = CH + 1
  121. 14800  SCREEN 1:COLOR 0,1:CLS
  122. 14900   PSET (1 + HZ,1 + VZ),2
  123. 15000   LINE (1 + HZ,1 + VZ)-(1 + HZ,MV * VZ + 1),2
  124. 15100   FOR J = 1 TO MV: FOR I = 2 TO MH
  125. 15200  N = M(I,J):X = I * HZ + 1:Y = J * VZ + 1
  126. 15300   IF  FN M(N / 2) = 0 THEN 15700
  127. 15500   PSET (X,Y),2
  128. 15600   LINE (X,Y)-(X - HZ,Y),2
  129. 15700   IF  FN M(N / 4) = 0 THEN 16100
  130. 15900   PSET (X,Y),2
  131. 16000   LINE (X,Y)-(X,Y - VZ),2
  132. 16100   NEXT I,J
  133. 16300  X = H * HZ - 1:Y = V * VZ - 1
  134. 16400   PSET (X + 1,Y + 1),2
  135. 16500   LINE (X + 1,Y + 1)-(X - HZ + 2,Y - VZ + 2),2
  136. 16600   PSET (X - HZ + 2,Y + 1),2
  137. 16700   LINE (X - HZ + 2,Y + 1)-(X + 1,Y - VZ + 2),2
  138. 16800   RETURN
  139. 17000   FOR X = 1 TO MH: FOR Y = 1 TO MV
  140. 17100  M(X,Y) = M(X,Y) + M(X,Y) * 16
  141. 17200   NEXT Y,X
  142. 17500  F =  INT ( RND (1) * 4) + 1
  143. 17600   ON F GOTO 17700,17800,17900,18000
  144. 17700  R = 0:S =  - 1: GOTO 18100
  145. 17800  R = 1:S = 0: GOTO 18100
  146. 17900  R = 0:S = 1: GOTO 18100
  147. 18000  R =  - 1:S = 0
  148. 18100   GOSUB 800
  149. 18300  DEF SEG : POKE 106,0
  150. 18400  IK$=INKEY$
  151. 18410  KEY(12) ON
  152. 18420  KEY(13) ON
  153. 18500  ON KEY(12) GOSUB 19100
  154. 18600  ON KEY(13) GOSUB 19400
  155. 18700  IF IK$ = " " THEN 20100
  156. 18800  IF IK$ = CHR$(27) THEN 21300
  157. 18900  GOTO 18400
  158. 19100  F = F - 1: IF F < 1 THEN F = 4
  159. 19200   GOTO 19500
  160. 19400  F = F + 1: IF F > 4 THEN F = 1
  161. 19500   ON F GOTO 19600,19700,19800,19900
  162. 19600  R = 0:S =  - 1: GOTO 21000
  163. 19700  R = 1:S = 0: GOTO 21000
  164. 19800  R = 0:S = 1: GOTO 21000
  165. 19900  R =  - 1:S = 0: GOTO 21000
  166. 20100  Z = M(H,V)
  167. 20200  T = Z * 2 ^ (F - 1):T =  FN M(T / 128)
  168. 20300   IF T = 0 THEN 20600
  169. 20500    GOTO 18300
  170. 20600  NM = NM + 1: LOCATE 22,24: PRINT "MOVE "NM
  171. 20650  FOR Q=1 TO 500:NEXT
  172. 20700   IF NM < 400 THEN W(NM) = F
  173. 20800  H = H + R:V = V + S
  174. 20900   IF V < 2 THEN 21500
  175. 21000   GOSUB 800
  176. 21100   GOTO 18300
  177. 21300   GOSUB 14700
  178. 21400   GOTO 18300
  179. 21500   CLS : LOCATE 12,5: PRINT "CONGRATS, IT TOOK YOU "NM" STEPS."
  180. 21540   IF CH = 1 THEN  LOCATE 14,8: PRINT "(BUT YOU CHEATED ONCE.)
  181. 21550   IF CH > 1 THEN  LOCATE 14,6: PRINT " (BUT YOU CHEATED ";CH;" TIMES.)"
  182. 21560  FOR I=1 TO 5000:NEXT
  183. 21700  V = V1:H = H1: GOSUB 14700
  184. 21900  X =  INT (H * HZ - HZ / 2) + 1:Y =  INT (V * VZ - VZ / 2) + 1
  185. 22000   PSET (X,Y),1
  186. 22100   FOR N = 1 TO NM
  187. 22200   IF N > 400 THEN 22900
  188. 22300  F = W(N)
  189. 22400   IF F = 1 THEN V = V - 1
  190. 22500   IF F = 2 THEN H = H + 1
  191. 22600   IF F = 3 THEN V = V + 1
  192. 22700   IF F = 4 THEN H = H - 1
  193. 22800   LINE (X,Y)-(INT (H * HZ - HZ / 2) + 1, INT (V * VZ - VZ / 2) + 1),1
  194. 22850  X=INT(H * HZ - HZ/2) + 1:Y=INT(V * VZ -VZ/2) + 1
  195. 22900   NEXT N
  196. 22920  LOCATE 1,1:PRINT "PRESS ANY KEY TO CONTINUE"
  197. 22950  IK$=INKEY$
  198. 23000   KEY(12) OFF:KEY(13) OFF: IF IK$ = "" THEN 22950
  199. 23100   CLEAR:GOTO 3
  200. 50000   REM
  201.